package com.tledu.oop;

public class Student {
    /**
     * 特征和行为
     * 抽象出来学生的特征和行为
     */
    /**
     * 每个学生都会有一个姓名
     */
    public String name;
    /**
     * 年龄
     */
    public int age;
    /**
     * 主修专业
     */
    public String major;

    /**
     * 学生
     */
    public String schoolName;

    public void study() {
        System.out.println("开始学习了");
    }

    public void study(String subject) {
        String name = "";
        System.out.println(this.name + "开始学习" + subject);
    }

    public void study(int hour) {
        System.out.println(name+"已经学了"+hour+"小时");
    }

    public void handInHomework() {
        System.out.println("交作业");
    }


    /**
     * 构造函数。 创建类的实例的时候会执行的函数
     * 默认情况下，会有一个无参构造
     * 自己去添加构造函数
     */
    // 这个String name就是一个局部变量
    public Student(String name) {
        // 设置了当前的name属性，为创建对象的时候传进来的值
        // 需要把这个局部变量设置到成员变量上，可以通过this获取成员变量
        this.name = name;
    }

    /**
     * 构造函数可以定义多个
     */
    public Student() {

    }

    // 方法的重载，
    //      同名的方法可以定义多个，但是多个方法的参数不能一一致的，在执行的过程中，根据不同的参数决定具体调用哪一个方法
    // 对象的引用和this
    //      this就代表当前对象,就代表当前对象的引用
    // this的常用作用
    //      1. 获取成员变量（当成员变量和局部变量命名冲突的时候，可以通过this获取成员变量）
    //      2. 可以返回当前对象的引用
    // 静态的变量和方法
    // 定义了一个静态变量
    // 静态方法归属于类，可以直接通过类进行获取
    // 静态方法全局唯一，在任何地方都可以操作，但是都会影响别的地方
    public static String globalName = "静态名字";

    public static String hello() {
        return "这是归属于类的一个静态方法";
    }

    public static void test() {
        // 同一个类中今天方法可以直接调用
        // 通过一个类中也可以在静态方法中直接使用静态属性
        System.out.println(hello());
        System.out.println(globalName);
//        System.out.println(this.name);
    }
}
